Alqor — Bölmə 4: İdarəetmə Strukturları#
4.1 Şərt — əgər#
Sintaksis#
əgər <şərt> onda
<gövdə>
[yoxsa əgər <şərt> onda
<gövdə>]...
[yoxsa
<gövdə>]
sonNümunələr#
əgər yaş >= 18 onda
yaz("Yetkin")
son
əgər yaş >= 18 onda
yaz("Yetkin")
yoxsa
yaz("Uşaq")
son
əgər bal >= 90 onda
yaz("Əla")
yoxsa əgər bal >= 70 onda
yaz("Yaxşı")
yoxsa əgər bal >= 50 onda
yaz("Kafi")
yoxsa
yaz("Qeyri-kafi")
sonəks halda — uzun forma#
yoxsa ilə tamamilə eynidir, oxunaqlılıq üçün:
əgər x > 0 onda
yaz("müsbət")
əks halda
yaz("müsbət deyil")
sonTək sətirlik forma#
əgər x > 0 onda yaz("müsbət") son
əgər x > 0 onda yaz("müsbət") yoxsa yaz("mənfi") sonİfadə kimi#
dəyişən nəticə = əgər x > 0 onda "müsbət" yoxsa "mənfi" sonvarsa — ixtiyari dəyərin bağlanması#
varsa istifadəçi = tapİstifadəçi(id) onda
yaz(istifadəçi.ad) // istifadəçi burada boş deyil
yoxsa
yaz("Tapılmadı")
son
// Çoxlu bağlama
varsa a = tap1(), b = tap2() onda
yaz(a, b) // ikisi də boş deyilsə
son
// Əlavə şərtlə
varsa i = tapİstifadəçi(id), i.aktivdir onda
yaz("aktiv istifadəçi")
sonyoxdursa — erkən çıxış#
funksiya emal(id: tam)
yoxdursa istifadəçi = tapİstifadəçi(id) onda
yaz("tapılmadı")
qaytar // bu blok mütləq çıxmalıdır
son
// istifadəçi burada görünür və boş deyil
yaz(istifadəçi.ad)
sonŞərt tipi#
Şərt mütləq məntiq olmalıdır:
əgər 1 onda ... son // ✖ ALQ-T007
əgər siyahı onda ... son // ✖ ALQ-T007
əgər uzunluq(siyahı) > 0 onda ... son // ✓
əgər siyahı boş deyil onda ... son // ✓4.2 Çoxvariantlı seçim — seç#
Sintaksis#
seç <ifadə>
hal <naxış>[, <naxış>]...
<gövdə>
...
[digər hallarda
<gövdə>]
sonƏsas istifadə#
seç gün
hal 1
yaz("Bazar ertəsi")
hal 2
yaz("Çərşənbə axşamı")
hal 6, 7
yaz("Həftəsonu")
digər hallarda
yaz("Naməlum gün")
sonKeçid yoxdur — hər
halavtomatik bitir. Qəsdən keçid üçünkeçaçar sözü:Alqorhal 1 yaz("bir") keç // növbəti hala keçir hal 2 yaz("iki")
Qısa ox forması#
seç gün
hal 1 → yaz("Bazar ertəsi")
hal 6, 7 → yaz("Həftəsonu")
digər hallarda → yaz("İş günü")
sonDiapazonla#
seç bal
hal 90..100 → yaz("Əla")
hal 70..<90 → yaz("Yaxşı")
hal 50..<70 → yaz("Kafi")
digər hallarda → yaz("Qeyri-kafi")
sonŞərtli seç (ifadəsiz)#
seç
hal yaş < 13 → yaz("uşaq")
hal yaş < 20 → yaz("yeniyetmə")
hal yaş < 65 → yaz("yetkin")
digər hallarda → yaz("ahıl")
sonTipə görə seçim#
seç tipi dəyər
hal tam → yaz("ədəd: {dəyər}")
hal mətn → yaz("mətn: {dəyər}")
hal siyahı[tam] → yaz("siyahı, {uzunluq(dəyər)} element")
hal boş → yaz("dəyər yoxdur")
digər hallarda → yaz("naməlum tip")
sonNaxış uyğunlaşdırma (pattern matching)#
seç nöqtə
hal (0, 0) → yaz("başlanğıc")
hal (x, 0) → yaz("X oxunda: {x}")
hal (0, y) → yaz("Y oxunda: {y}")
hal (x, y) əgər x == y → yaz("diaqonalda")
hal (x, y) → yaz("({x}, {y})")
son
// Siyahı naxışı
seç siyahı
hal [] → yaz("boş")
hal [tək] → yaz("bir element: {tək}")
hal [ilk, ...qalan] → yaz("ilk: {ilk}, qalan: {uzunluq(qalan)}")
son
// Obyekt naxışı
seç hadisə
hal Klik{x, y} → yaz("klik ({x},{y})")
hal DüyməBasma{kod: 27} → yaz("Escape")
hal DüyməBasma{kod} → yaz("düymə {kod}")
sonTamlıq yoxlaması#
sadalama və ya məntiq üzərində seç bütün halları əhatə etməlidir, yoxsa digər hallarda tələb olunur (ALQ-T031).
İfadə kimi#
dəyişən ad = seç gün
hal 1 → "Bazar ertəsi"
hal 2 → "Çərşənbə axşamı"
digər hallarda → "Digər"
son4.3 Şərtli dövr — nə qədər ki#
Sintaksis#
nə qədər ki <şərt>
<gövdə>
sondəyişən i = 1
nə qədər ki i <= 5
yaz("Rəqəm: {i}")
i += 1
sonSonsuz dövr#
nə qədər ki doğru
dəyişən əmr = oxu()
əgər əmr == "çıx" onda
dayan
son
sonQısa forma:
həmişə
...
sonŞərti sonda yoxlayan dövr (do-while)#
təkrarla
yaz("Ən azı bir dəfə işləyir")
nə qədər ki şərt4.4 Sayğaclı dövr — təkrarla#
təkrarla 5 dəfə
yaz("Salam")
son
// Sayğac dəyişəni ilə
təkrarla i, 5 dəfə
yaz("Təkrar {i}") // 1, 2, 3, 4, 5
son4.5 Kolleksiya dövrü — hər ... üçün ... içində#
Sintaksis#
hər <bağlama> üçün <ifadə> içində
<gövdə>
sonAlternativ söz sırası — kolleksiya əvvəldə (Azərbaycan dilində daha təbii oxunur: "meyvələr içində hər meyvə üçün"):
meyvələr içində hər meyvə üçün
yaz(meyvə)
son
sifarişlər içində hər s üçün əgər s.ödənilib // filtr — eyni sətirdə
yaz(s.məbləğ)
yoxsa
yaz("ödənilmiş sifariş yoxdur")
sonHər iki forma eyni Hər qovşağına çevrilir; alternativ formada addım və asinxron gözlə yoxdur (onlar üçün əsas forma işlədilir).
Siyahı üzərində#
dəyişən meyvələr = ["alma", "armud", "üzüm"]
hər meyvə üçün meyvələr içində
yaz(meyvə)
sonİndekslə#
hər i, meyvə üçün meyvələr içində
yaz("{i}: {meyvə}") // 0: alma, 1: armud, 2: üzüm
sonDiapazon üzərində#
hər i üçün 1..5 içində
yaz(i) // 1, 2, 3, 4, 5
son
hər i üçün 0..<10 içində
yaz(i) // 0..9
son
hər i üçün 10..1 içində
yaz(i) // 10, 9, ..., 1
son
hər i üçün 1..10 addım 2 içində
yaz(i) // 1, 3, 5, 7, 9
sonLüğət üzərində#
dəyişən yaşlar = {"Aysel": 24, "Rəşad": 31}
hər açar üçün yaşlar içində
yaz(açar) // Aysel, Rəşad
son
hər açar, dəyər üçün yaşlar içində
yaz("{açar}: {dəyər}")
son
hər dəyər üçün yaşlar.dəyərlər() içində
yaz(dəyər)
sonMətn üzərində#
hər hərf üçün "salam" içində
yaz(hərf) // s, a, l, a, m
sonDağıtma ilə#
dəyişən cütlər = [(1, "bir"), (2, "iki")]
hər (ədəd, ad) üçün cütlər içində
yaz("{ədəd} = {ad}")
sonFiltrlə#
hər x üçün ədədlər içində əgər x % 2 == 0
yaz(x) // yalnız cütlər
sonTərsinə#
hər x üçün siyahı.tərs() içində
yaz(x)
son4.6 Dövr idarəetməsi#
dayan — dövrdən çıx#
hər x üçün 1..100 içində
əgər x > 10 onda
dayan
son
yaz(x)
sondavam et — növbəti iterasiyaya keç#
hər x üçün 1..10 içində
əgər x % 2 == 0 onda
davam et
son
yaz(x) // yalnız tək ədədlər
sonEtiketli dövrlər#
xarici: hər i üçün 1..3 içində
daxili: hər j üçün 1..3 içində
əgər i * j > 4 onda
dayan xarici // xarici dövrdən çıx
son
əgər j == 2 onda
davam et daxili
son
yaz("{i} × {j}")
son
sonyoxsa bloku (dövr tam bitdikdə)#
hər x üçün siyahı içində
əgər x == axtarılan onda
yaz("tapıldı")
dayan
son
yoxsa
yaz("tapılmadı") // `dayan` olmadan bitibsə işləyir
son4.7 Kolleksiya qurma (comprehension)#
// Siyahı
dəyişən kvadratlar = [x * x üçün x içində 1..10]
dəyişən cütlər = [x üçün x içində 1..20 əgər x % 2 == 0]
dəyişən matris = [[i * j üçün j içində 1..3] üçün i içində 1..3]
// Lüğət
dəyişən kvadratLüğət = {x: x * x üçün x içində 1..5}
// Dəst
dəyişən təkrarsız = {x % 3 üçün x içində 1..10}
// Generator (tənbəl)
dəyişən tənbəl = (x * x üçün x içində 1..1_000_000)4.8 keç və boş ifadə#
funksiya hələYazılmayıb()
keç // heç nə etmir, yer tutucu
son
əgər şərt onda
keç // qəsdən boş
yoxsa
yaz("işlədi")
son4.9 iddia — təsdiq#
iddia yaş > 0
iddia yaş > 0, "Yaş müsbət olmalıdır"
iddia uzunluq(siyahı) == 5, "Gözlənilən 5, gələn {uzunluq(siyahı)}"Yanlışdırsa İddiaXətası atır. --buraxılış rejimində iddialar silinir (--iddia-saxla ilə saxlanılır).
4.10 təmin — şərt zəmanəti#
funksiya böl(a: tam, b: tam) -> onluq
təmin b != 0 yoxsa
at ArqumentXətası("Sıfıra bölmək olmaz")
son
qaytar a / b
sontəmin buraxılış rejimində də qalır — istifadəçi girişinin yoxlanması üçündür.
4.11 Gecikmə — gecikdir#
Blokdan çıxarkən icra olunacaq kod (resursların bağlanması üçün):
funksiya faylOxu(yol: mətn) -> mətn
dəyişən f = fayl.aç(yol)
gecikdir f.bağla() // funksiya necə bitsə də işləyəcək
əgər f.ölçü() == 0 onda
qaytar "" // f.bağla() burada işləyir
son
qaytar f.oxu() // və burada da
sonBir neçə gecikdir tərs sırada (LIFO) işləyir.
4.12 İdarəetmə strukturlarının xülasəsi#
| Konstruksiya | Açar sözlər | Bağlanış |
|---|---|---|
| Şərt | əgər onda yoxsa əgər yoxsa / əks halda | son |
| İxtiyari bağlama | varsa onda yoxsa | son |
| Erkən çıxış | yoxdursa onda | son |
| Çoxvariantlı | seç hal digər hallarda keç | son |
| Şərtli dövr | nə qədər ki | son |
| Sonsuz dövr | həmişə | son |
| Sayğaclı dövr | təkrarla dəfə | son |
| Kolleksiya dövrü | hər üçün içində addım | son |
| Dövr nəzarəti | dayan davam et | — |
| Boş ifadə | keç | — |
| Təsdiq | iddia təmin | — |
| Təmizləmə | gecikdir | — |